/*
 * Copyright (C) 2020 Open Source Robotics Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/

#include "SupervisorHasSession.hpp"

namespace rmf_fleet_adapter {
namespace phases {

bool supervisor_has_session(
  const rmf_door_msgs::msg::SupervisorHeartbeat& heartbeat,
  const std::string& session_id,
  const std::string& door_name)
{
  using rmf_door_msgs::msg::SupervisorHeartbeat;
  using rmf_door_msgs::msg::DoorSessions;
  using rmf_door_msgs::msg::Session;

  auto it = std::find_if(
    heartbeat.all_sessions.begin(),
    heartbeat.all_sessions.end(),
    [&door_name](const DoorSessions& door_sessions)
    {
      return door_sessions.door_name == door_name;
    });

  if (it == heartbeat.all_sessions.end())
    return false;

  const DoorSessions& door_sessions = *it;
  auto it2 = std::find_if(
    door_sessions.sessions.begin(),
    door_sessions.sessions.end(),
    [&session_id](const Session& session)
    {
      return session.requester_id == session_id;
    });

  return it2 != door_sessions.sessions.end();
}

} // namespace phases
} // namespace rmf_fleet_adapter